local Tools = require("通用方法集合.二次封装方法.Tools")
local configs = require("configs.Config")

-- 满月宴会：每日刷新，从配置文件读取刷新时间

function 满月宴会今日已完成()
	local 记录内容 = _ENV["文件_读取完成时间"]("满月宴会")
	if 记录内容 == nil or 记录内容 == "" then
		return false
	end
	local 记录时间 = math.tointeger(记录内容)
	if 记录时间 == nil then
		return false
	end
	-- 从配置文件获取刷新时间
	local 刷新小时 = 4 -- 默认值
	if configs and configs.任务刷新时间 and configs.任务刷新时间["满月宴会刷新时间"] then
		刷新小时 = configs.任务刷新时间["满月宴会刷新时间"]
	end
	-- 计算最近一次重置时间（本地时间按 UTC+8 处理）
	local 当前 = os.time()
	local t = os.date("*t", 当前)
	t.hour = 刷新小时; t.min = 0; t.sec = 0
	local 今日重置点 = os.time(t)
	local 重置时间
	if 当前 >= 今日重置点 then
		重置时间 = 今日重置点
	else
		重置时间 = 今日重置点 - 24 * 3600
	end
	return 记录时间 >= 重置时间
end

local function 再次检测是否已经完成()
  if  Tools.查找固定区域文字并点击({52, 309, 193, 356}, "结束", 500, false) then
	_ENV["调试输出"]("已经完成", true, 1500)
	_ENV["文件_保存完成时间"]("满月宴会")
	return true
  else
	return false
  end
end

local function 选择难度并入场()
	-- 进入活动页签并定位“满月宴会”
	for i = 1, 20 do
		-- 点击“活动”页签（副本界面上方页签）
		Tools.查找固定区域文字并点击({1171, 128, 1288, 181}, "活动", 500, true)
		-- 左侧列表点击“满月宴会”
		if Tools.查找固定区域文字并点击({75, 268, 222, 307}, "满月宴会", 1000, true) then
			break
		end
	end
	if 再次检测是否已经完成() == true then 
		_ENV["调试输出"]("已经完成", true, 1500)
		_ENV["文件_保存完成时间"]("满月宴会")
		return true	
	end
	-- 根据等级选择场次
	local 当前防御 = _ENV["到整数"] (防御)
    _ENV["调试输出"]("防御:"..防御 , true , 1500)          
	local 目标区域
	if 当前防御 >= 1200 then
		目标区域 = {1481, 538, 1626, 587} -- 第4场
        _ENV["调试输出"]("去第四场:" , true , 1500) 
	elseif 当前防御 >= 1000 then
		目标区域 = {1475, 435, 1630, 491} -- 第3场
        _ENV["调试输出"]("去第三场:" , true , 1500) 
	elseif 当前防御 >= 800 then
		目标区域 = {1486, 337, 1629, 384} -- 第2场
        _ENV["调试输出"]("去第二场:" , true , 1500) 
	else
		目标区域 = {1477, 240, 1639, 289} -- 第1场（40~50）
        _ENV["调试输出"]("去第一场:" , true , 1500) 
	end
	

	-- 点击入场
	for i = 1, 10 do
        if Tools.查找固定区域文字并点击({1039, 685, 1154, 729}, "确认", 1000, true) then
           break
        
		elseif Tools.查找固定区域文字并点击(目标区域, "盛宴", 600, true) then
		end
	end
    for i = 1 , 10 do
        if _ENV["图色_多点找色Ex"](找色_过图等待 , 0.9 , 0 , 0 , 0 , 1 , true) then
            _ENV["调试输出"]("过图等待" , true , 1500)
          
        end
        sleep(1000)
    end
	return true
end


local function 选择第几场盛宴()
	-- 1) 左上角：若存在“满月宴会场”字样则点击，以确保地图目标被选中
	for i = 1, 5 do
		if Tools.查找固定区域文字并点击({156, 102, 359, 135}, "满月宴会场", 600, true) then
			break
		end
	end
	-- 2) 右侧列表：检测是否可见“盛宴”，并根据等级点击对应场次
	local 当前防御 = _ENV["到整数"](防御)
	local 第1场 = {1509, 263, 1668, 307}
	local 第2场 = {1509, 363, 1668, 407}
	local 第3场 = {1509, 463, 1668, 507}
	local 第4场 = {639, 451, 962, 636}
	sleep(2000)
	for i = 1 , 10 do
		if 当前防御 >= 1000 then
			Tools.查找固定区域文字并点击(第4场, "盛宴", 800, true)
		elseif 当前防御 >= 600 then
			Tools.查找固定区域文字并点击(第3场, "盛宴", 800, true)
		elseif 当前防御 >= 240 then
            _ENV["鼠标_随机点击"] (801 , 649 , 2000 , 2500)
            sleep(1000)            
			Tools.查找固定区域文字并点击(第4场, "移动", 800, true)
		else
            --40级不需要移动的给
		end
		sleep(1000)
		for i = 1 , 10 do
            if _ENV["图色_多点找色Ex"](找色_大返回 , 0.9 , 0 , 0 , 0 , 1 , true ) then
                break
            end
        end
	end

	return true
end

local function 房间内监控()
	local 开始时间 = os.time()
	local 最大运行时间 = 3600
	for i = 1, 3600 do
		-- 结束/完成检测
		local 剩余文本 = _ENV["文字识别"](110, 366, 315, 401, 3)
		if (剩余文本 and (string.find(剩余文本, "结束") or string.find(剩余文本, "完成"))) then
			_ENV["文件_保存完成时间"]("满月宴会")
			return true
		end

		if Tools.查找固定区域文字并点击({846, 653, 1074, 702}, "确定", 600, true)  then
			_ENV["调试输出"]("满月宴会结束，保存完成", true, 1200)
			_ENV["文件_保存完成时间"]("满月宴会")
			return true
		end

        开启自动(false)  -- 满月宴会场景中不允许回到主界面
		-- 根据剩余时间文本判断：小于等于3分钟则保存并退出（格式：剩余X小时XX分钟）
		if 剩余文本 and 剩余文本 ~= "" then
			local 小时匹配 = string.match(剩余文本, "剩余(%d+)小时")
			local 分钟匹配 = string.match(剩余文本, "(%d+)分钟")
			local 剩余秒数 = 0
			if 小时匹配 then
				剩余秒数 = 剩余秒数 + tonumber(小时匹配) * 3600
			end
			if 分钟匹配 then
				剩余秒数 = 剩余秒数 + tonumber(分钟匹配) * 60
			end
			-- 调试输出剩余时间
			_ENV["调试输出"](
				"满月宴会剩余时间: " .. (小时匹配 and (小时匹配 .. "小时") or "") .. (分钟匹配 and (分钟匹配 .. "分钟") or "") ..
				(剩余秒数 > 0 and (" ≈ " .. tostring(剩余秒数) .. "秒") or ""),
				true,
				800
			)
			if 剩余秒数 > 0 and 剩余秒数 <= 180 then
				_ENV["调试输出"]("满月宴会剩余不足3分钟，提前保存完成", true, 1200)
				_ENV["文件_保存完成时间"]("满月宴会")
				-- 不退出，继续监控直到真正结束
			end		
		end
		-- 超时保护
		if os.time() - 开始时间 >= 最大运行时间 then
			_ENV["调试输出"]("满月宴会超时退出", true, 1500)
			_ENV["文件_保存完成时间"]("满月宴会")
			return true
		end
		if i % 5 == 0 then
			_ENV["调试输出"]("满月宴会进行中"..i, true, 800)
		end

        -- 检查是否意外回到主界面（不应该在满月宴会进行中发生）
        -- if 界面判断() == "主界面" then 
        --     _ENV["调试输出"]("检测到意外回到主界面，满月宴会可能已结束", true, 1500)
        --     return true
        -- end
		sleep(1000)
	end
	return true
end


function 满月宴会()
	if 满月宴会今日已完成() then
		_ENV["调试输出"]("满月宴会今日已完成，跳过", true, 1000)
		return true
	end
	开启副本页面("活动")
	选择难度并入场()
	选择第几场盛宴()
	房间内监控()
	return true
end

return true


